在 App 開發中,資料的保存與讀取是不可或缺的一環。不論是使用者的偏好設定、登入狀態,還是需要離線瀏覽的內容,都必須妥善存放。今天我們來介紹 iOS 上常見的幾種資料儲存方式。
範例:
// 儲存
UserDefaults.standard.set(true, forKey: "isDarkMode")
// 讀取
let isDarkMode = UserDefaults.standard.bool(forKey: "isDarkMode")
範例:儲存 JSON 檔
struct User: Codable {
let name: String
let age: Int
}
let user = User(name: "Jerry", age: 18)
let data = try JSONEncoder().encode(user)
let url = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask)[0]
.appendingPathComponent("user.json")
try data.write(to: url)
import KeychainAccess
let keychain = Keychain(service: "com.example.MyApp")
// 儲存
do {
try keychain.set("secret_token_123", key: "userToken")
} catch {
print("Keychain 儲存失敗: \(error)")
}
// 讀取
do {
let token = try keychain.get("userToken")
print("取得 token: \(token ?? "無")")
} catch {
print("Keychain 讀取失敗: \(error)")
}
// 刪除
do {
try keychain.remove("userToken")
} catch {
print("Keychain 刪除失敗: \(error)")
}
建立 Model
假設你有一個Item的Entity,包含timestamp: Date
@Environment(\.managedObjectContext) private var viewContext
private func addItem() {
withAnimation {
let newItem = Item(context: viewContext)
newItem.timestamp = Date()
do {
try viewContext.save()
} catch {
let nsError = error as NSError
fatalError("Unresolved error \(nsError), \(nsError.userInfo)")
}
}
}
func fetchItems() -> [Item] {
let request = Item.fetchRequest()
do {
let items = try viewContext.fetch(request)
return items
} catch {
print("Core Data 讀取失敗: \(error)")
return []
}
}
@Model
class ItemModel {
var timestamp: Date
init(timestamp: Date) {
self.timestamp = timestamp
}
}
struct SwiftDataExampletView: View {
@Environment(\.modelContext) private var modelContext
@Query(sort: \ItemModel.timestamp) var items: [ItemModel]
var body: some View {
VStack {
List(items, id: \.timestamp) { item in
Text("\(item.timestamp)")
}
Button("新增 Date") {
let newPerson = ItemModel(timestamp: Date())
modelContext.insert(newPerson)
}
}
}
}
#Preview {
SwiftDataExampletView()
.modelContainer(for: ItemModel.self)
}
UserDefaults
FileManager
Keychain
Core Data
今天我們介紹了 iOS 常見的資料儲存基礎方式,從最簡單的 UserDefaults
到進階的 Core Data
。